/****************************************************************************
*  Arthea Server by R. Jennings (2007-2008)   http://arthea.googlecode.com/ *
*  By using this code you comply with the Artistic and GPLv2 Licenses.      *
****************************************************************************/


// Taken from Suroden (http://sourceforge.net/projects/suroden)
// - RJ, Aug'07

using System.Collections.Generic;

namespace Arthea.Collections.Interfaces
{
    /// <summary>
    /// Interface for a priority queue
    /// </summary>
    /// <typeparam name="T">The type to queue</typeparam>
    public interface IPriorityQueue<T> : IList<T>
    {
        /// <summary>
        /// Pushes the specified object.
        /// </summary>
        /// <param name="O">The object.</param>
        /// <returns></returns>
        int Push(T O);

        /// <summary>
        /// Pops this instance.
        /// </summary>
        /// <returns></returns>
        T Pop();

        /// <summary>
        /// Peeks this instance.
        /// </summary>
        /// <returns></returns>
        T Peek();

        /// <summary>
        /// Updates the specified i.
        /// </summary>
        /// <param name="i">The i.</param>
        void Update(int i);
    }
}